home *** CD-ROM | disk | FTP | other *** search
Wrap
/*----------------------------------------------------- Copyright (c) 2006 McAfee, Inc. All Rights Reserved. -----------------------------------------------------*/ function SiteAdvisorFirefoxExtension() { var on; var highliteon; var buttonon; var pagedom; var domain_specifier = ""; var loc = ""; var prodmode = true; var siteadvisor_debug = false; var siteadvisor_release = true; var on_search_page = "false"; var byebye = false; var completejavascript = false; var alreadyWarned = false; var udscache = new Array(); var cachesize = 50; var cachettl = 43200000; var regexmap = new Array(); var req; var doSSL = false; var searchdat = "search.dat"; var McLocales = new Array("en-US","en-CA","en-GB","en-AU","en-IE","es-ES","es-MX","es-AR","es-CL","es-PE", "fr-FR","fr-CA","pt-PT","pt-BR","de-DE","it-IT","ja-JP","nl-NL"); var OEMStrB; var overlay_objects = new Array(); var highlite_colors = new Array(); function putContents(rURL,lURL,build,cksum){ var contents = getContentsFromURL(rURL); if (!contents) return; tFile = "temp.js"; writeFile(contents,tFile); if (validateCksum(tFile,cksum)) copyFile(tFile,lURL); else return; if (build != -1) { setBuild(build); } } function copyFile(src,dst) { str = readFile(src); writeFile(str,dst); } function getContentsFromURL(rURL) { try { httpreq = new XMLHttpRequest(); httpreq.open('GET', rURL, false); httpreq.send(null); if(httpreq.status == 200){ return httpreq.responseText; } else { return null; } } catch (connerr) { return null; } } function readFile(lURL) { var file = Components.classes["@mozilla.org/file/directory_service;1"] .getService(Components.interfaces.nsIProperties) .get("ProfD", Components.interfaces.nsIFile); file.append(lURL); var data = ""; var fstream = Components.classes["@mozilla.org/network/file-input-stream;1"] .createInstance(Components.interfaces.nsIFileInputStream); var sstream = Components.classes["@mozilla.org/scriptableinputstream;1"] .createInstance(Components.interfaces.nsIScriptableInputStream); fstream.init(file, 1, 0, false); sstream.init(fstream); var str = sstream.read(-1); while (str.length > 0) { data += str; str = sstream.read(-1); } sstream.close(); fstream.close(); return data; } function writeFile(str,lURL) { var file = Components.classes["@mozilla.org/file/directory_service;1"] .getService(Components.interfaces.nsIProperties) .get("ProfD", Components.interfaces.nsIFile); file.append(lURL); var foStream = Components.classes["@mozilla.org/network/file-output-stream;1"] .createInstance(Components.interfaces.nsIFileOutputStream); foStream.init(file, 0x02 | 0x08 | 0x20, 0664, 0); // write, create, truncate foStream.write(str, str.length); foStream.close(); } function validateCksum(lURL,cksum) { var version = "0"; try { var appInfo = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULAppInfo); version = appInfo.version; } catch (appinfoerr) { try { version = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch).getCharPref("app.version"); } catch (preferr) { return true; } } try { var versionChecker = Components.classes["@mozilla.org/xpcom/version-comparator;1"].getService(Components.interfaces.nsIVersionComparator); if(versionChecker.compare(version, "1.5") < 0) return true; } catch (vcheckerr) { return true; } var file = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("ProfD", Components.interfaces.nsIFile); file.append(lURL); var hasher = Components.classes["@mozilla.org/security/hash;1"].createInstance(Components.interfaces.nsICryptoHash); hasher.init(hasher.MD5); var fstream = Components.classes["@mozilla.org/network/file-input-stream;1"] .createInstance(Components.interfaces.nsIFileInputStream); fstream.init(file, 1, 0, false); hasher.updateFromStream(fstream,fstream.available()); if (hasher.finish(true) == base16To64(cksum)) return true; if (cksum == "0123456789ABCDEF") return true; return false; } function base16To64(str16) { var b64 = new Array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/'); var str64 = "" while (str16.length > 0) { str24 = str16.substring(0,6); i24 = parseInt(str24,16); if (str24.length == 6) { str64 += b64[(i24&0xFC0000)>>18]+b64[(i24&0x3F000)>>12]+b64[(i24&0xFC0)>>6]+b64[i24&0x3F]; } else if (str24.length == 4) { str64 += b64[(i24&0xFC00)>>10]+b64[(i24&0x3F0)>>4]+b64[(i24&0xF)<<2]+"="; } else if (str24.length == 2) { str64 += b64[(i24&0xFC)>>2]+b64[(i24&0x3)<<4] + "=="; } str16 = str16.slice(6); } return str64; } function addScript(lURL) { try{ data = readFile(lURL); } catch(e) { return; } try{ eval(data); } catch(e) {} if (!completejavascript) setBuild(0); if (getLKV() != 0 && parseFloat(getVersion()) > getLKV()) { sendUpgradePing(); setLKV(getVersion()); } else if (getLKV() == 0) { setLKV(getVersion()); } populate_menus(); setUpdateURL(); var appcon = window.document.getElementById("appcontent"); if (appcon) { appcon.addEventListener("DOMContentLoaded", save_me, false); appcon.addEventListener("focus",focus_handler,true); appcon.addEventListener("blur",focus_handler,true); appcon.addEventListener("mousedown",focus_handler,true); appcon.addEventListener("mouseup",focus_handler,true); } changebutton(); } function makeDssQuery(dssquery) { var dssurl = getDss(); httpGetRequest(dssurl, dssquery, true, true,null,false); } function makeSSLDssQuery(dssquery) { var dssurl = getDss(); httpGetRequest(dssurl, dssquery, true, true,null,true); } function retryDssQuery(dssurl,dssquery,greq,forceSSL) { if (dssurl.match(/dss1/)) dssurl = dssurl.replace("dss1","dss2"); else if (dssurl.match(/dss2/)) dssurl = dssurl.replace("dss2","dss1"); setDss(dssurl); httpGetRequest(dssurl, dssquery, false, false,greq,forceSSL); } function useSSL(dssurl) { if (dssurl.match(/^https:/)) return dssurl; else return dssurl.replace(/^http:/,"https:"); } function httpGetRequest(dssurl,dssquery,retry,timeout,oldreq,forceSSL) { if (oldreq) { if (oldreq.timeoutId) clearTimeout(oldreq.timeoutId); oldreq.onreadystatechange = null; oldreq.abort(); } var greq = new XMLHttpRequest(); if (timeout) { greq.timeoutId = setTimeout(retryDssQuery,10000,dssurl,dssquery,greq,forceSSL); greq.onprogress = function () { clearTimeout(greq.timeoutId); greq.timeoutId = setTimeout(retryDssQuery,10000,dssurl,dssquery,greq,forceSSL); } } greq.open('GET',(forceSSL? useSSL(dssurl) : checkSSL(dssurl)) + dssquery, true); greq.overrideMimeType('text/xml'); greq.setRequestHeader("Accept-Encoding", ""); greq.onreadystatechange = function () { if (greq.readyState == 4) { var stat; try {stat = greq.status;} catch(staterr) {stat = 500;} if (greq.timeoutId) clearTimeout(greq.timeoutId); if (stat == 200 && greq.responseXML.documentElement.nodeName != "parsererror") { DSSResponseHandler(greq.responseXML,dssquery); } else if (retry) { retryDssQuery(dssurl,dssquery,greq,forceSSL); } else { DSSFailureHandler(dssquery); } } }; greq.send(null); } function DSSResponseHandler(xml,dssquery) { var responseHandlers = {'PingResponse': versionHandler, 'DomainQueryResponse': SingleQueryDSSHandler}; var handlerFound = false; for (var key in responseHandlers) if (xml.getElementsByTagName(key).length == 1) { responseHandlers[key](xml); handlerFound = true; } if (!handlerFound) { checkForEmergency(xml); DSSFailureHandler(dssquery); } } function DSSFailureHandler(dssquery) { var responseHandlers = {'Ping?': pingFailureHandler, 'Query?': function(){}}; for (var key in responseHandlers) if (dssquery.indexOf(key) == 0) responseHandlers[key](); } function pingFailureHandler() { addScript(searchdat); } function get_js() { doSSL = getPref("bool","extensions.safe.doSSL",false); makeSSLDssQuery("Ping?includeVersionInfo=true&version=2&client_ver=" + getFullVersion() +"&locale="+getLocale()+"&aff_id="+getAffid()); } function versionHandler(XML) { checkForEmergency(XML); var versioninfos = XML.getElementsByTagName("VersionInfo"); for (var i = 0; i < versioninfos.length; i++) { versioninfo = versioninfos.item(i); entity = versioninfo.attributes.getNamedItem("entity").nodeValue; if (entity.toLowerCase() == searchdat) { newestbuild = parseInt(versioninfo.attributes.getNamedItem("version").nodeValue); currentbuild = getBuild(); if (newestbuild > currentbuild) { loca = versioninfo.attributes.getNamedItem("location").nodeValue; cksum = versioninfo.attributes.getNamedItem("cksum").nodeValue; var ioserv = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService); var locaObj = ioserv.newURI(loca,"utf-8",null); if (locaObj.host.match(/\.siteadvisor\.com$/) || locaObj.host.match(/\.mcafee\.com$/) || locaObj.host.match(/^siteadvisor\.com$/) || locaObj.host.match(/^mcafee\.com$/)) putContents(loca,searchdat,newestbuild,cksum); if (currentbuild != 0 && getBuild() > currentbuild) sendUpgradePing(); immediate = versioninfo.attributes.getNamedItem("immediate").nodeValue; if (immediate == "true") check_auto_update(); } break; } } addScript(searchdat); } function getBuild() { var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); try{ return pref.getIntPref("extensions.safe.build"); } catch(e) { pref.setIntPref("extensions.safe.build",0); return pref.getIntPref("extensions.safe.build"); } } function setBuild(build) { var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); pref.setIntPref("extensions.safe.build",build); } function populate_menus() { ButtonPref = getPref("bool","extensions.safe.enablebutton",true); onPref = getPref("bool","extensions.safe.on",true); highlitePref = getPref("bool","extensions.safe.highlight",false); doSSLPref = getPref("bool","extensions.safe.doSSL",false); on = onPref; highliteon = highlitePref; buttonon = ButtonPref; doSSL = doSSLPref; if (!buttonon) document.getElementById("SAFE-Combined-MoreInfo").setAttribute("disabled","true"); } function getPref(preftype, prefname, prefdef) { var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); try{ return pref.getBoolPref(prefname); } catch(e) { pref.setBoolPref(prefname, prefdef); return pref.getBoolPref(prefname); } } // LKV = last known version function getLKV() { var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); try{ return parseFloat(pref.getCharPref("extensions.safe.lastKnownVersion")); } catch(e) { pref.setCharPref("extensions.safe.lastKnownVersion","0"); return parseFloat(pref.getCharPref("extensions.safe.lastKnownVersion")); } } function setLKV(lkv) { var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); pref.setCharPref("extensions.safe.lastKnownVersion",lkv); } function getFullVersion() { var client_version = "FF_unknown"; try { client_version = "FF_" + getVersion(); client_version += "_" + getBuild(); } catch (versionerr) {} return client_version; } function checkSSL(dssurl) { if (dssurl.match(/^https:/)) return dssurl; if (doSSL) return dssurl.replace(/^http:/,"https:"); else return dssurl; } function sendUpgradePing() { try{ var request = new XMLHttpRequest(); request.open("GET", checkSSL(getDss()) + "Ping?Version=2&Type=upgrade&client_type=SAFE&client_ver=" +getFullVersion()+"&locale="+getLocale()+"&aff_id="+getAffid(), true); request.send(null); } catch(comerr) {} } // see if its time to send a ping and send if necessary function pingDSS() { // get last daily and monthly from prefs (in string millisecond format) var lastDaily = getLastDailyPing(); var lastMonthly = getLastMonthlyPing(); // convert string dates into Date objects var lastDailyDate = new Date(lastDaily); var lastMonthlyDate = new Date(lastMonthly); // get the "next month" and "next day" in milliseconds var nextMonth = lastMonthlyDate.setUTCMonth(lastMonthlyDate.getUTCMonth()+1); var nextDay = lastDailyDate.setUTCDate(lastDailyDate.getUTCDate()+1); // get "right now" in milliseconds var rightNowDate = new Date(); var rightNow = rightNowDate.getTime(); // if a month has passed, send a monthly if (nextMonth < rightNow) { // try to send monthly try { request = new XMLHttpRequest(); request.open("GET", checkSSL(getDss()) + "Ping?Version=2&Type=monthly&client_type=SAFE&client_ver=" + getFullVersion()+"&locale="+getLocale(), false); request.overrideMimeType('text/xml'); request.setRequestHeader("Accept-Encoding", ""); request.send(null); var stat; try {stat = request.status;} catch(staterr) {stat = 500;} if (stat != 200 || request.responseXML.documentElement.nodeName == "parsererror") return; if (request.responseXML.getElementsByTagName("PingResponse").length == 0) return; } catch(pingreqerr) { return; } // update last daily to NOW rightNowDate.setUTCHours(0); rightNowDate.setUTCMinutes(0); rightNowDate.setUTCSeconds(0); rightNow = rightNowDate.getTime(); setLastDailyPing(rightNow); // update last monthly to 1st of month rightNowDate.setUTCDate(1); rightNow = rightNowDate.getTime(); setLastMonthlyPing(rightNow); // otherwise, if a day has passed, send a daily } else if (nextDay < rightNow) { // try to send daily try { request = new XMLHttpRequest(); request.open("GET", checkSSL(getDss()) + "Ping?Version=2&Type=daily&client_type=SAFE&client_ver=" + getFullVersion()+"&locale="+getLocale()+"&aff_id="+getAffid(), false); request.overrideMimeType('text/xml'); request.setRequestHeader("Accept-Encoding", ""); request.send(null); var stat; try {stat = request.status;} catch(staterr) {stat = 500;} if (stat != 200 || request.responseXML.documentElement.nodeName == "parsererror") return; if (request.responseXML.getElementsByTagName("PingResponse").length == 0) return; } catch(pingreqerr) { return; } // update last daily to NOW rightNowDate.setUTCHours(0); rightNowDate.setUTCMinutes(0); rightNowDate.setUTCSeconds(0); rightNow = rightNowDate.getTime(); setLastDailyPing(rightNow); } } function getLocale() { try { var ffLocale = navigator.language; var langPart = ffLocale.split("-")[0]; var langMatch; for (var l = 0; l < McLocales.length; l++) { if (McLocales[l] == ffLocale) return ffLocale; if (!langMatch && McLocales[l].split("-")[0] == langPart) langMatch = McLocales[l]; } return langMatch ? langMatch : "en-US"; } catch(e) { return "en-US"; } } function getDss() { var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); try{ return pref.getCharPref("extensions.safe.dss"); } catch(e) { pref.setCharPref("extensions.safe.dss","http://dss1.siteadvisor.com/DSS/"); return pref.getCharPref("extensions.safe.dss"); } } function setDss(dss) { var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); pref.setCharPref("extensions.safe.dss",dss); } function getLastDailyPing() { var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); try{ return parseFloat(pref.getCharPref("extensions.safe.lastDailyPing")); } catch(e) { pref.setCharPref("extensions.safe.lastDailyPing","0"); return parseFloat(pref.getCharPref("extensions.safe.lastDailyPing")); } } function setLastDailyPing(t) { var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); pref.setCharPref("extensions.safe.lastDailyPing",t.toString()); } function getLastMonthlyPing() { var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); try{ return parseFloat(pref.getCharPref("extensions.safe.lastMonthlyPing")); } catch(e) { pref.setCharPref("extensions.safe.lastMonthlyPing","0"); return parseFloat(pref.getCharPref("extensions.safe.lastMonthlyPing")); } } function setLastMonthlyPing(t) { var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); pref.setCharPref("extensions.safe.lastMonthlyPing",t.toString()); } function check_auto_update() { if (!( getPref("bool", "extensions.safe.enablebutton", true) || getPref("bool", "extensions.safe.on", true) || getPref("bool", "extensions.safe.highlight", false))) return; var areq = new XMLHttpRequest(); areq.open('GET',"https://sadownload.mcafee.com/products/sa/firefox/update.rdf", true); areq.overrideMimeType('text/plain'); areq.onreadystatechange = function () { try{ if (areq.readyState == 4) { var stat; try { stat = areq.status; } catch (staterr) { stat = 500; } if (stat == 200){ resp = areq.responseText; start = resp.indexOf("<version>"); end = resp.indexOf("</version>"); newest_version = parseFloat(resp.substring(start+9,end)); var VERSION = parseFloat(getVersion()); // check if the server has a newer version if (newest_version > VERSION) { var install = confirm(strb("safe.updateRequiredResponse")); if (install) { // Extension force-Auto-update code var nsIUpdateItem = Components.interfaces.nsIUpdateItem; var gExtensionManager = Components.classes["@mozilla.org/extensions/manager;1"].getService(Components.interfaces.nsIExtensionManager); var itemType=nsIUpdateItem.TYPE_EXTENSION; var items; try{ items = gExtensionManager.getItemList('{1650a312-02bc-40ee-977e-83f158701739}', itemType, { }); var updates = Components.classes["@mozilla.org/updates/update-service;1"].getService(Components.interfaces.nsIUpdateService); updates.checkForUpdates(items, items.length, itemType, Components.interfaces.nsIUpdateService.SOURCE_EVENT_USER, window); } catch(ve) { // Firefox 1.5 makes this tons of fun... item = gExtensionManager.getItemForID('{1650a312-02bc-40ee-977e-83f158701739}'); items = new Array(); items[0] = item; updateListener = new Object(); updateListener.onUpdateStarted = function() {}; updateListener.onUpdateEnded = function() {}; updateListener.onAddonUpdateStarted = function(addon) {}; updateListener.onAddonUpdateEnded = function(addon,status) { if (status == 1) { var xpimgr = Components.classes["@mozilla.org/xpinstall/install-manager;1"].createInstance(Components.interfaces.nsIXPInstallManager); urls = new Array(); urls[0] = addon.xpiURL; progress = new Object(); progress.onStateChange = function(idx,st,val) { if (st == Components.interfaces.nsIXPIProgressDialog.INSTALL_DONE) { restart = confirm(strb("safe.closeFFRequest")); if (restart) { var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator); var enumerator = wm.getEnumerator(""); while(enumerator.hasMoreElements()) { var win = enumerator.getNext(); win.close(); } } } } progress.onProgress = function(idx,val,mval) {} xpimgr.initManagerFromChrome(urls,1,progress); } }; gExtensionManager.update(items,1,false,updateListener); } } else alert(strb("safe.turnOffSafe")); } } } } catch(e) {} }; areq.send(null); } function getVersion() { try{ var RDFServ = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService); var versionRDF = RDFServ.GetResource("http://www.mozilla.org/2004/em-rdf#version"); var extension_data_source= Components.classes["@mozilla.org/extensions/manager;1"].getService(Components.interfaces.nsIExtensionManager).datasource; var nameArc = RDFServ.GetResource("http://www.mozilla.org/2004/em-rdf#name"); var Container = Components.classes["@mozilla.org/rdf/container;1"].getService(Components.interfaces.nsIRDFContainer); try { var root = RDFServ.GetResource("urn:mozilla:item:root"); Container.Init(extension_data_source,root); } catch(e) { var root = RDFServ.GetResource("urn:mozilla:extension:root"); Container.Init(extension_data_source,root); } var elements=Container.GetElements(); while (elements.hasMoreElements()) { var element = elements.getNext().QueryInterface(Components.interfaces.nsIRDFResource); var target = extension_data_source.GetTarget(element, nameArc ,true); if (target) { name = target.QueryInterface(Components.interfaces.nsIRDFLiteral).Value; if (name == "McAfee SiteAdvisor") return extension_data_source.GetTarget(element, versionRDF, true).QueryInterface(Components.interfaces.nsIRDFLiteral).Value; } } return strb("safe.unknownVersion"); } catch (allerr) { return strb("safe.unknownVersion"); } } function stripargs(loc) { i = loc.indexOf("?") if (i != -1) loc = loc.substring(0,i); i = loc.indexOf("&") if (i != -1) loc = loc.substring(0,i); i = loc.indexOf(";") if (i != -1) loc = loc.substring(0,i); i = loc.indexOf(",") if (i != -1) loc = loc.substring(0,i); i = loc.indexOf("'") if (i != -1) loc = loc.substring(0,i); i = loc.indexOf(" ") if (i != -1) loc = loc.substring(0,i); return loc; } function addToCache(uds,verdict,color,regxp) { newregxp = ""; for (var c = 0; c < regxp.length; c++) { if (regxp[c] == "}") newregxp += ")"; else if (regxp[c] == "{") newregxp += "(?:"; else if (regxp[c] == "/") newregxp += "\\/"; else newregxp += regxp[c]; } newEntry = new Object(); newEntry["ds"] = uds; newEntry["vd"] = verdict; newEntry["ts"] = (new Date()).getTime(); newEntry["its"] = (new Date()).getTime(); newEntry["co"] = color; regexmap[regexmap.length] = newregxp; if (udscache.length >= cachesize) { min = 0 for (var i = 1; i < udscache.length; i++) { if (udscache[i]["its"] + cachettl < (new Date()).getTime()) { min = i; break; } if (udscache[i]["ts"] < udscache[min]["ts"]) min = i } udscache[min] = newEntry; } else { udscache[udscache.length] = newEntry; } } function getFromCache(mURL) { var dsfrommap = getDsFromMap(mURL); if (!dsfrommap) return false; var entryfromcache = getEntryFromCache(dsfrommap); if (!entryfromcache) return false; return entryfromcache; } function getDsFromMap(mURL) { for (var i = 0; i < regexmap.length; i++) { regxp = regexmap[i]; regxps = regxp.split(/\s/); for (var r = 0; r < regxps.length; r++) { try{ eval("var rem = mURL.match(/" + regxps[r] + "/);"); if (rem) { return rem[rem.length-1]; } } catch (rexe) {} } } return false; } function getEntryFromCache(ds) { for (var i = 0; i < udscache.length; i++) { if (udscache[i]["ds"] == ds) { if (udscache[i]["its"] + cachettl < (new Date()).getTime()) continue; else return udscache[i]; } } return false; } function updateCache(cacheEntry) { cacheEntry["ts"] = (new Date()).getTime(); } function bad_host(h) { if (h == "" || h.match(/[^a-z0-9\.\-]/) || h == "localhost" || h == "127.0.0.1" || (h.indexOf(".") == -1 && !h.match(/^\d+$/)) || h.indexOf(".") == 0 || h.match(/^10\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) || h.match(/^172\.(1[6-9]|2[0-9]|3[0-1])\.\d{1,3}\.\d{1,3}$/) || h.match(/^192\.168\.\d{1,3}\.\d{1,3}$/) || h.match(/\.localdomain$/) || h.match(/\.local$/)) { return true; } return false; } function bad_protocol(p) { if (p.indexOf("http:") == 0 || p.indexOf("https:") == 0 || p.indexOf("ftp:") == 0) return false; return true; } function changebutton() { try{ if (!buttonon) { document.getElementById("SAFE-TB-Combined").setAttribute("image","chrome://safe/content/safe.gif"); return; } domain_specifier = ""; loc = window._content.location.href; document.getElementById("SAFE-TB-Combined").setAttribute("image","chrome://safe/content/safe.gif"); var h = ""; var p = ""; var pn = ""; try{ h = window._content.location.host.toLowerCase(); portsplit = h.split(":"); if (portsplit.length == 2) h = portsplit[0]; p = window._content.location.protocol.toLowerCase(); pn = window._content.location.pathname; } catch(he) {return;} if (bad_host(h)) return; if (bad_protocol(p)) return; sloc = stripargs(h + pn); cacheEntry = getFromCache(sloc); if (cacheEntry) { domain_specifier = cacheEntry["ds"]; if (cacheEntry["vd"].toLowerCase() == "unknown") document.getElementById("SAFE-TB-Combined").setAttribute("image","chrome://safe/content/safe.gif"); else document.getElementById("SAFE-TB-Combined").setAttribute("image","chrome://safe/content/safe-" + cacheEntry["co"].toLowerCase() + ".gif"); updateCache(cacheEntry); return; } makeDssQuery("Query?Entitlement=FOO&Type=domain&version=2&name="+escape(sloc)+"&client_ver="+getFullVersion()+"&locale="+getLocale()+"&aff_id="+getAffid()); } catch(e) {} } function SingleQueryDSSHandler(XML) { checkForEmergency(XML); var domaininfo = XML.getElementsByTagName("DomainInfo"); if (!domaininfo || !domaininfo.item(0)) { return; } domain_specifier = domaininfo.item(0).attributes.getNamedItem("name").nodeValue; var dmd = XML.getElementsByTagName("DomainMetaData"); var regxp; if (dmd) { regxp = dmd.item(0).attributes.getNamedItem("domainSpecRegExs").nodeValue; } else { regxp = "REGEXNOTFOUND"; } infochildren = domaininfo.item(0).childNodes; for (var i = 0; i < infochildren.length; i++) { if (infochildren.item(i).nodeName.toLowerCase() == "classification") { if (infochildren.item(i).attributes.getNamedItem("code").nodeValue.toLowerCase() == "unknown") document.getElementById("SAFE-TB-Combined").setAttribute("image","chrome://safe/content/safe.gif"); else document.getElementById("SAFE-TB-Combined").setAttribute("image","chrome://safe/content/safe-" + infochildren.item(i).attributes.getNamedItem("color").nodeValue.toLowerCase() + ".gif"); addToCache(domain_specifier,infochildren.item(i).attributes.getNamedItem("code").nodeValue,infochildren.item(i).attributes.getNamedItem("color").nodeValue,regxp); break; } } pingDSS(); } function focus_handler(e) { if (e.originalTarget.nodeName == "#document" || e.originalTarget.nodeName == "tab" || e.originalTarget.nodeName == "xul:tab") { docloc = window._content.document.location.href; if (docloc != loc) { changebutton(); } } } function openSettings() { var params = {ok:false}; window.openDialog('chrome://safe/content/settings.xul','safe-settings','chrome,modal',params); populate_menus(); nav_href = window._content.document.location.href; if (!buttonon) { document.getElementById("SAFE-TB-Combined").setAttribute("image","chrome://safe/content/safe.gif"); document.getElementById("SAFE-Combined-MoreInfo").setAttribute("disabled","true"); } else { changebutton(); document.getElementById("SAFE-Combined-MoreInfo").setAttribute("disabled","false"); } if (params.ok && eval(on_search_page) == true) { window._content.location.reload(); } doSSL = getPref("bool","extensions.safe.doSSL",false); } function postInstallCheck() { var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); var firstInstall = false; try{ firstInstall = pref.getBoolPref("extensions.safe.firstinstall"); } catch(e) { pref.setBoolPref("extensions.safe.firstinstall",true); firstInstall = pref.getBoolPref("extensions.safe.firstinstall"); } if (firstInstall) { var params = {ok:false}; pref.setBoolPref("extensions.safe.firstinstall",false); window.openDialog('chrome://safe/content/disclosure.xul','safe-disclosure','chrome,modal',params); if (params.ok) { try { window._content.location.href = "http://www.siteadvisor.com/download/ff_postinstall.html?aff_id="+getAffid(); var irequest = new XMLHttpRequest(); var pingquery = checkSSL(getDss()) + "Ping?Version=2&Type=install&client_type=SAFE&client_ver=" + getFullVersion() + "&locale="+getLocale()+"&aff_id="+getAffid(); irequest.open("GET", pingquery, true); irequest.send(null); } catch (comerr) {} addSASearch(); } else { pref.setBoolPref("extensions.safe.firstinstall",true); var gExtensionManager = Components.classes["@mozilla.org/extensions/manager;1"].getService(Components.interfaces.nsIExtensionManager); try { gExtensionManager.uninstallItem("{1650a312-02bc-40ee-977e-83f158701739}"); } catch (e) { ds = gExtensionManager.datasource; gExtensionManager.uninstallExtension("{1650a312-02bc-40ee-977e-83f158701739}"); } window.openDialog('chrome://safe/content/uninst.xul','safe-uninst','chrome,modal'); } } } function removeInstallRegKey() { try { var regKey = Components.classes["@mozilla.org/windows-registry-key;1"].createInstance(Components.interfaces.nsIWindowsRegKey); regKey.open(Components.interfaces.nsIWindowsRegKey.ROOT_KEY_LOCAL_MACHINE, "SOFTWARE\\Mozilla\\Firefox\\Extensions", Components.interfaces.nsIWindowsRegKey.ACCESS_WRITE); regKey.removeValue("{1650a312-02bc-40ee-977e-83f158701739}"); } catch (RegErr) {} } function cleanup() { if (byebye == true) { var pingquery = checkSSL(getDss()) + "Ping?Version=2&Type=uninstall&client_type=SAFE&client_ver=" + getFullVersion()+"&locale="+getLocale()+"&aff_id="+getAffid(); var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); pref.clearUserPref("extensions.safe.build"); pref.clearUserPref("extensions.safe.dss"); pref.clearUserPref("extensions.safe.firstinstall"); pref.clearUserPref("extensions.safe.highlight"); pref.clearUserPref("extensions.safe.lastDailyPing"); pref.clearUserPref("extensions.safe.lastMonthlyPing"); pref.clearUserPref("extensions.safe.on"); pref.clearUserPref("extensions.safe.enablebutton"); pref.clearUserPref("extensions.safe.lastKnownVersion"); pref.clearUserPref("extensions.safe.doSSL"); removeSASearch(); removeInstallRegKey(); try{ var irequest = new XMLHttpRequest(); irequest.open("GET", pingquery, false); irequest.send(null); } catch (reqerr) {} return; } var RDFService = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService); var Container = Components.classes["@mozilla.org/rdf/container;1"].getService(Components.interfaces.nsIRDFContainer); var extensionDS= Components.classes["@mozilla.org/extensions/manager;1"].getService(Components.interfaces.nsIExtensionManager).datasource; try { var root = RDFService.GetResource("urn:mozilla:item:root"); Container.Init(extensionDS,root); } catch (e) { var root = RDFService.GetResource("urn:mozilla:extension:root"); Container.Init(extensionDS,root); } var nameArc = RDFService.GetResource("http://www.mozilla.org/2004/em-rdf#name"); var toBeUninstalledArc = RDFService.GetResource("http://www.mozilla.org/2004/em-rdf#toBeUninstalled"); var found = false; var elements = Container.GetElements(); while (elements.hasMoreElements()) { var element = elements.getNext().QueryInterface(Components.interfaces.nsIRDFResource); var name; var toBeUninstalled; var target = extensionDS.GetTarget(element, nameArc ,true); if (target) { name = target.QueryInterface(Components.interfaces.nsIRDFLiteral).Value; if (name == "McAfee SiteAdvisor") { target = extensionDS.GetTarget(element, toBeUninstalledArc ,true); if (target) { toBeUninstalled=target.QueryInterface(Components.interfaces.nsIRDFLiteral).Value; if (toBeUninstalled && (toBeUninstalled == "true")) { window.removeEventListener("unload", cleanup, false); var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); var pingquery = checkSSL(getDss()) + "Ping?Version=2&Type=uninstall&client_type=SAFE&client_ver=" + getFullVersion()+"&locale="+getLocale()+"&aff_id="+getAffid(); var oldaffid = getAffid(); pref.clearUserPref("extensions.safe.build"); pref.clearUserPref("extensions.safe.dss"); pref.clearUserPref("extensions.safe.firstinstall"); pref.clearUserPref("extensions.safe.highlight"); pref.clearUserPref("extensions.safe.lastDailyPing"); pref.clearUserPref("extensions.safe.lastMonthlyPing"); pref.clearUserPref("extensions.safe.on"); pref.clearUserPref("extensions.safe.enablebutton"); pref.setBoolPref("extensions.safe.uninstalled",true); pref.clearUserPref("extensions.safe.lastKnownVersion"); pref.clearUserPref("extensions.safe.doSSL"); removeSASearch(); removeInstallRegKey(); try { var irequest = new XMLHttpRequest(); irequest.open("GET", pingquery, false); irequest.send(null); } catch(reqerr) {} window.open("http://www.siteadvisor.com/ffuninstall.html?aff_id="+oldaffid); } } break; } } } } var uninstallObserver = { observe: function(aSubject, aTopic, aData) { try { item = aSubject.QueryInterface(Components.interfaces.nsIUpdateItem); if (item.id != "{1650a312-02bc-40ee-977e-83f158701739}") return; if (aData == "item-uninstalled"){ byebye = true; var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); var firstInstall = false; try{ firstInstall = pref.getBoolPref("extensions.safe.firstinstall"); } catch(ein) {} if (!firstInstall) { pref.setBoolPref("extensions.safe.uninstalled",true); window.open("http://www.siteadvisor.com/ffuninstall.html?aff_id="+getAffid()); } } } catch (e) {} } }; function addUninstallObserver() { var obs = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces["nsIObserverService"]); obs.addObserver(uninstallObserver, "em-action-requested", false); } function removeSASearch() { try{ var file = Components.classes["@mozilla.org/file/directory_service;1"] .getService(Components.interfaces.nsIProperties) .get("ProfD", Components.interfaces.nsIFile); file.append("searchplugins"); file.append("siteadvisor.src"); file.remove(false); file = Components.classes["@mozilla.org/file/directory_service;1"] .getService(Components.interfaces.nsIProperties) .get("ProfD", Components.interfaces.nsIFile); file.append("searchplugins"); file.append("siteadvisor.gif"); file.remove(false); } catch (e) { try{ var file = Components.classes["@mozilla.org/file/directory_service;1"] .getService(Components.interfaces.nsIProperties) .get("CurProcD", Components.interfaces.nsIFile); file.append("searchplugins"); file.append("siteadvisor.src"); file.remove(false); file = Components.classes["@mozilla.org/file/directory_service;1"] .getService(Components.interfaces.nsIProperties) .get("ProfD", Components.interfaces.nsIFile); file.append("searchplugins"); file.append("siteadvisor.gif"); file.remove(false); } catch (e2) {} } } function addSASearch() { var internetSearch = Components.classes["@mozilla.org/browser/internetsearch-service;1"].getService(Components.interfaces.nsIInternetSearchService); internetSearch.AddSearchEngine("http://www.siteadvisor.com/download/safe/siteadvisor.src", "http://www.siteadvisor.com/download/safe/siteadvisor.gif", "",""); } function getUninstalled() { var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); try{ return pref.getBoolPref("extensions.safe.uninstalled"); } catch(e) { return false; } } function checkForEmergency(xml) { if (alreadyWarned) return; var urr = xml.getElementsByTagName("UpgradeRequiredResponse"); if (urr.length == 0) return; urr = urr[0].childNodes; for (var i = 0; i < urr.length; i++) { var c = urr.item(i); if (c.nodeName.toLowerCase() == "description") { alert(c.firstChild.nodeValue); alreadyWarned = true; } } } function getAffid() { try { var affid = OEMstrb("Affid"); if (affid) return affid; } catch (StrBErr) {} return 0; } function getShowUpsellMessage() { try { var showUpsellMessage = OEMstrb("ShowSafeSearchUpsell"); if (showUpsellMessage && showUpsellMessage.toLowerCase() == "true") return true; else if (showUpsellMessage && showUpsellMessage.toLowerCase() == "false") return false; } catch (StrBErr) {} try { var regKey = Components.classes["@mozilla.org/windows-registry-key;1"].createInstance(Components.interfaces.nsIWindowsRegKey); regKey.open(Components.interfaces.nsIWindowsRegKey.ROOT_KEY_LOCAL_MACHINE, "SOFTWARE\\SiteAdvisor", Components.interfaces.nsIWindowsRegKey.ACCESS_READ); var hasSuite = regKey.readStringValue("HasSuite"); if (hasSuite == "true") return false; else if (hasSuite == "false") return true; } catch(regErr) {} return true; } function getUpsellMessage() { try { var upsellMessage = OEMstrb("SafeSearchUpsellMessage"); if (upsellMessage) return upsellMessage; } catch (StrBErr) {} return strb('safe.submitError'); } function getUpsellUrl() { try { var upsellUrl = OEMstrb("SafeSearchUpsellUrl"); if (upsellUrl) return upsellUrl; } catch (StrBErr) {} return null; } function setUpdateURL() { var updateON = OEMstrb('AutoUpdateFF'); if (!updateON) updateON = "true"; try { var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); if (updateON == "false") pref.setCharPref("extensions.{1650a312-02bc-40ee-977e-83f158701739}.updateURL",""); else pref.setCharPref("extensions.{1650a312-02bc-40ee-977e-83f158701739}.updateURL","https://sadownload.mcafee.com/products/sa/firefox/update.rdf?aff_id="+getAffid()); } catch (prefErr) {} } function strb(strKey) { try{ return document.getElementById('safe-script-bundle').getString(strKey); } catch (bundleErr) { return null; } } function OEMstrb(strKey) { try { return OEMStrB.GetStringFromName(navigator.language+"."+strKey); } catch (bundleErr) {} try { return OEMStrB.GetStringFromName(navigator.language.toLowerCase()+"."+strKey); } catch (bundleErr) {} try { return OEMStrB.GetStringFromName(strKey); } catch (bundleErr) {} return null; } function chromeExists(p) { try { var chromeRegistry = Components.classes["@mozilla.org/chrome/chrome-registry;1"].getService(Components.interfaces.nsIChromeRegistry); var ioService = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService); var chromeFileURI = ioService.newURI(p,"UTF-8",null); var localFileURI = chromeRegistry.convertChromeURL(chromeFileURI); if (localFileURI.spec.match(/^jar:/)) { var jarFile = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); var jarPath = localFileURI.spec.split("!")[0].replace(/jar:/,""); jarPath = ioService.getProtocolHandler("file").QueryInterface(Components.interfaces.nsIFileProtocolHandler).getFileFromURLSpec(jarPath).path; jarFile.initWithPath(jarPath); var relPath = localFileURI.spec.split("!")[1].replace(/^\//, ""); var zipReader = Components.classes["@mozilla.org/libjar/zip-reader;1"].createInstance(Components.interfaces.nsIZipReader); zipReader.init(jarFile); zipReader.open(); var found = zipReader.findEntries(relPath); zipReader.close(); return found?found.hasMoreElements():false; } else { var localFile = ioService.getProtocolHandler("file").QueryInterface(Components.interfaces.nsIFileProtocolHandler).getFileFromURLSpec(localFileURI.spec); return localFile.exists(); } } catch (chromeErr) { return false; } } var stringBundleService = Components.classes["@mozilla.org/intl/stringbundle;1"].getService(Components.interfaces.nsIStringBundleService); if (chromeExists("chrome://safe/content/oem.txt")) { OEMStrB = stringBundleService.createBundle("chrome://safe/content/oem.txt"); } else { OEMStrB = stringBundleService.createBundle("chrome://safe/content/default.txt"); } if (!getUninstalled()) { addUninstallObserver(); window.addEventListener("load", get_js, false); window.addEventListener("load", pingDSS,false); window.addEventListener("load", postInstallCheck, false); window.addEventListener("unload", cleanup, false); } else { var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); pref.clearUserPref("extensions.safe.uninstalled"); } return {"getBuild": getBuild, "getVersion": getVersion, "getAffid": getAffid, "openSettings": openSettings, "domain_specifier": function() {return domain_specifier;}} } SiteAdvisorFunPack = SiteAdvisorFirefoxExtension();